﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace CRM.Database.Model
{
    public class OwnershipsPatternsCollection : AbstractCollection
    {
        private static List<OwnershipPatterns> _list;

        /// <summary>
        /// Список форм собственности
        /// </summary>
        public List<OwnershipPatterns> OwnershipsPatternsList
        {
            get
            {
                return Entities.OwnershipPatterns.ToList();

                if (_list == null)
                    _list = DB.Entities.OwnershipPatterns.ToList();
                return _list;
            }
        }


        /// <summary>
        /// Обнуление статической коллекции
        /// </summary>
        protected override void SetStaticListToNULL()
        {
            _list = null;
        }

        /// <summary>
        /// Обнолвение элемент
        /// </summary>
        /// <param name="item">Элемент</param>
        /// <param name="userLogin">Пользователь, который внёс изменения</param>
        /// <returns>Результат операции</returns>
        public new bool Update(object item, string userLogin)
        {
            var newItem = item as OwnershipPatterns;

            if (newItem == null)
                return false;
            var item4update = GetItemById(newItem.IdOwnershipPattern) as OwnershipPatterns;
            if (item4update == null)
                return false;

            if (newItem.IsActive != null) item4update.IsActive = newItem.IsActive;
            if (!string.IsNullOrEmpty(newItem.NameEn)) item4update.NameEn = newItem.NameEn;
            if (!string.IsNullOrEmpty(newItem.NameRu)) item4update.NameRu = newItem.NameRu;
            if (!string.IsNullOrEmpty(newItem.NameShortEn)) item4update.NameShortEn = newItem.NameShortEn;
            if (!string.IsNullOrEmpty(newItem.NameShortRu)) item4update.NameShortRu = newItem.NameShortRu;

            return base.Update(item4update, userLogin);
        }

        #region Overrides of AbstractCollection

        /// <summary>
        /// Получение списка элементов
        /// </summary>
        /// <returns>Список элементов</returns>
        public override List<object> GetList()
        {
            return new List<object>(OwnershipsPatternsList);
        }

        /// <summary>
        /// Получение типа текущего элемента
        /// </summary>
        /// <returns></returns>
        protected override Type GetItemType()
        {
            return typeof (OwnershipPatterns);
        }

        /// <summary>
        /// Получение статического списка для хранения объектов
        /// </summary>
        /// <returns></returns>
        public override object GetStaticCollection()
        {
            return _list;
        }

        /// <summary>
        /// Получение элемента из коллекции по идентификатору
        /// </summary>
        /// <param name="itemId">Идентификатор</param>
        /// <returns>Элемент</returns>
        public override object GetItemById(int itemId)
        {
            return Entities.OwnershipPatterns.Find(itemId);
        }

        #endregion
    }
}